状況
serverless framework + Typescript で AWS Lambda の関数を作成。
デプロイして実行したときに以下のエラーが発生。
{
"errorType": "Runtime.ImportModuleError",
"errorMessage": "Error: Cannot find module '@lib/utils/logger'\nRequire stack:\n- /var/task/src/app/handlers/api/hoge.js\n- /var/runtime/UserFunction.js\n- /var/runtime/Runtime.js\n- /var/runtime/index.js",
"stack": [
"Runtime.ImportModuleError: Error: Cannot find module '@lib/utils/logger'",
"Require stack:",
"- /var/task/src/app/handlers/api/hoge.js",
"- /var/runtime/UserFunction.js",
"- /var/runtime/Runtime.js",
"- /var/runtime/index.js",
" at _loadUserApp (/var/runtime/UserFunction.js:221:13)",
" at Object.module.exports.load (/var/runtime/UserFunction.js:279:17)",
" at Object.<anonymous> (/var/runtime/index.js:43:34)",
" at Module._compile (internal/modules/cjs/loader.js:1085:14)",
" at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)",
" at Module.load (internal/modules/cjs/loader.js:950:32)",
" at Function.Module._load (internal/modules/cjs/loader.js:790:12)",
" at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)",
" at internal/main/run_main_module.js:17:47"
]
}
tsconfig.json の paths にエイリアスを定義している
{
"compilerOptions": {
/** ~省略~ */
"paths": {
"@lib": ["./src/lib"]
},
}
}
解決方法
tsconfing-paths-webpack-plugin
をwebpack.config.js
に追加
余談
今回の問題は、結果的に上記の解決方法でよかったのだが、serverless に webpack を追加したことによってまた別の問題発生し結構ハマるのであった・・・